package org.example.supplychain.service;

import org.example.supplychain.domain.EntryExitRecords;
import org.example.supplychain.domain.Material;
import org.example.supplychain.domain.TotalMaterial;
import org.example.supplychain.mapper.EntryExitRecordsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 出入库记录功能实现
 */
@Service
public class EntryExitRecordsService {
    @Autowired
    private EntryExitRecordsMapper entryExitRecordsMapper;
    @Autowired
    private TotalMaterialService totalMaterialService;
    @Autowired
    private MaterialService materialService;


    /**
     * 修改最小原料数量的值（警戒值）
     * 修改后更新告警状态列表
     *
     * @param minimumMaterialNumber
     */
    public void setMinimumMaterialNumber(long minimumMaterialNumber) {
        ;
        totalMaterialService.updateWaringState();//更新告警状态列表
    }

    /**
     * 增加出入库记录
     *
     * @param materialName   物资名称
     * @param materialNumber 物资数量
     * @param recordStatus   入库/出库
     * @param supplierName   供应商名称
     * @param inventoryName  仓库名称
     */
    public void addRecord(String materialName, long materialNumber, String recordStatus, String supplierName, String inventoryName) {
        EntryExitRecords entryExitRecords = new EntryExitRecords();
        entryExitRecords.setRecordDate(new Date());
        entryExitRecords.setRecordStatus(recordStatus);
        entryExitRecords.setInventoryName(inventoryName);
        entryExitRecords.setMaterialName(materialName);
        entryExitRecords.setSupplierName(supplierName);
        entryExitRecords.setMaterialNumber(materialNumber);
        entryExitRecordsMapper.addEntryExitRecords(entryExitRecords);
//        totalMaterialService.updateMaterialTotalNumber();//更新原料总量（此函数内部有更新告警的函数）
    }

    /**
     * 新建一个材料(有警戒值)（同时需要在原料总量管理里和原料管理里实现，未传参数置空或时间取当前值）
     *
     * @param materialName          材料名称
     * @param supplierName          供应商名称
     * @param minimunMaterialNumber 货物最小库存
     */
    public void addMaterial(String materialName, String supplierName, long minimunMaterialNumber) {
        Material material = new Material();
        TotalMaterial totalMaterial = new TotalMaterial();
        material.setMaterialName(materialName);
        material.setSupplierName(supplierName);
        materialService.addMaterial(material);
        totalMaterial.setMaterialName(materialName);
        totalMaterial.setMinimumStock(minimunMaterialNumber);
        totalMaterialService.addTotalMaterial(totalMaterial);
    }

    /**
     * 新建一个材料(无警戒值)（同时需要在原料总量管理里和原料管理里实现，未传参数置空或时间取当前值）
     *
     * @param materialName 材料名称
     * @param supplierName 供应商名称
     */
    public void addMaterial(String materialName, String supplierName) {
        Material material = new Material();
        TotalMaterial totalMaterial = new TotalMaterial();
        material.setMaterialName(materialName);
        material.setSupplierName(supplierName);
        materialService.addMaterial(material);
        totalMaterial.setMaterialName(materialName);
        totalMaterialService.addTotalMaterial(totalMaterial);
    }

    /**
     * 获取所有出入库记录
     *
     * @return 出入库记录列表
     */
    public List<EntryExitRecords> getAllEntryExitRecords() {
        return entryExitRecordsMapper.getAllEntryExitRecords();
    }
}
